package listViewDataStructures;

import org.jivesoftware.smack.packet.Message;

/**
 * Classe che rappresenta un elemento della Lista delle Conversazioni. Ogni entry
 * della lista delle conversazioni deve mostrare: <br>
 * <br> Remote User Name - il nome dell'Utente Remoto della conversazione.
 * <br> Last Message - l'ultimo Messaggio di Chat inviato nella conversazione.
 * <br> Timestamp - la marcatura temporale dell'ultimo messaggio inviato nella conversazione. <br>
 * @author giulio
 */
public class Conversation {
	
	private String remoteUserJid;
	private String remoteUserName;
	private Message message;
	private String body;
	
	private String timestamp;
	private boolean isNew = false;
	
	private final int MSG_BODY_MAX_LEN = 32;
	
	/** TODO: 
	 * Costruttore dell'oggetto che rappresenta la conversazione.
	 * @param remoteUserJid - il JID dell'utente remoto.
	 * @param remoteUserName - il nome dell'utente remoto (da visualizzare nella lista).
	 * @param lastMessage - l'ultimo messaggio inviato.
	 * @param timestamp - timestamp dell'ultimo messaggio inviato.
	 */
	public Conversation(String remoteUserJid, String remoteUserName, Message lastMessage, String timestamp) {
		
		this.remoteUserJid = remoteUserJid;
		this.remoteUserName = remoteUserName;
		this.timestamp = timestamp;
		message = lastMessage;
		
		body = message.getBody();
		
		if (body.length() > MSG_BODY_MAX_LEN) {
			//System.out.println("Body Len: " + body.length());
			body = body.substring(0, MSG_BODY_MAX_LEN) + "...";
		}
	}

	public String getBody() {
		return body;
	}
	
	public String getRemoteUserJid() {
		return remoteUserJid;
	}
	
	/**
	 * Imposta il valore della data e dell'ora.
	 */
	public void setTimestamp(String timestamp) {
		this.timestamp = timestamp;
	}

	/**
	 * Restituisce l'ultimo messaggio della conversazione
	 * @return ultimo messaggio inviato/ricevuto.
	 */
	public Message getMessage() {
		return message;
	}
	
	/**
	 * Restituisce la data e l'ora memorizzata in questa classe.
	 * @return data e ora dell'ultimo messaggio inviato/ricevuto.
	 */
	public String getTimestamp() {
		return timestamp;
	}

	/**
	 * Restituisce il nome dell'utente remoto che sta partecipando a questa conversazione.
	 * @return il nome dell'utente remoto.
	 */
	public String getRemoteUserName() {
		return remoteUserName;
	}
	
	/**
	 * Segnala che i messaggi di questa conversazione sono stati letti (cambiando la grafica in modo opportuno).
	 */
	public void setIsNew(boolean flag) {
		isNew = flag;
	}
	
	public boolean getIsNew() {
		return isNew;
	}
}
